<?php
/**
* Fonctionnalités pour les produits
* -- Regroupe toutes les fonctions relative au produit (livre)

* [Mathieu FOURNIAL]
*/

/* -- Fait par [Mathieu FOURNIAL]
 * --- Obtenir les produits du panier ---
 * Renvoi un tableau avec l'ensemble des produits dans le panier
 * Si aucun produit est dans le panier le tableau est vide
 */
function getProduitPanier()
{
    $element_panier = Array();
    // Si la session panier existe
    if(isset($_SESSION['panier']))
    {
        if(!empty($_SESSION['panier']))
        {
            // Récupere les livre dans le panier
            $element_panier = $_SESSION['panier'];
        }
    }
    // Retourne le tableau
    return $element_panier;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Ajoute un produit au panier ---
 * Prend en paramètre le numéro ISBN unique du produit
 * -> Ajoute le produit dans le panier et met à jour la session
 */
function addProduitPanier($isbn)
{
    $element_panier = getProduitPanier();
    $valeur = $isbn;
    
    // Verifie si l'élément n'est pas présent dans le panier
    if(!isInArray($element_panier, $valeur))
    {
        // Insere l'element dans le panier
        $element_panier[] = $valeur;
    }
    
    // Créer/MàJ un cookie pour stocker les produits dans le panier
    $_SESSION['panier'] = $element_panier;
    addProduitQuantite($isbn, 1);
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Supprime un produit du panier ---
 * Prend en paramètre le numéro ISBN unique du produit
 * -> Vérifie que le produit est bien dans le panier
 * -> Supprime l'élément en faisant la différence entre le tableau du panier et un tableau avec uniquement le produit à supprimer
 * -> Met à jour le panier, ainsi que la quantité dans le panier = 1 (par défaut)
 */
function delProduitPanier($isbn)
{
    $element_panier = getProduitPanier();
    $valeur = $isbn;
    $element_supprimer = Array($valeur);
    
    // Verifie si l'élément est présent dans le panier
    if(isInArray($element_panier, $valeur))
    {
        // Supprime l'element du le panier
        $element_panier = array_diff($element_panier, $element_supprimer);
    }
    
    // Créer/MàJ un cookie pour stocker les produits dans le panier
    $_SESSION['panier'] = $element_panier;
    delProduitQuantite($isbn);
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Vérifie que la valeur est dans le tableau ---
 * Prend en paramètre le tableau et la valeur
 * Renvoi un booléen :
 * => VRAI : si la valeur est dans le tableau
 * => FAUX : sinon
 */
function isInArray($tableau, $valeur)
{
    $res = false;
    // Si c'est un tableau
    if(is_array($tableau))
    {
        // Vérifie que la valeur est dans le tableau
        $res = in_array($valeur, $tableau);
    }
    // Retourne la valeur
    return $res;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Vide le panier ---
 * Efface la valeur des donner du panier
 * Efface les quantités associés à chaque produit du panier
 */
function deletePanier()
{
    // Efface le panier
    $_SESSION['panier'] = '';
    $_SESSION['qte'] = Array();
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Obtenir les quantites des produits ---
 * Renvoi un tableau avec l'ensemble des produits dans le panier
 * Si aucun produit est dans le panier le tableau est vide
 */
function getProduitQuantite()
{
    $element_quantite = Array();
    // Si la session panier existe
    if(isset($_SESSION['qte']))
    {
        if(!empty($_SESSION['qte']))
        {
            // Récupere les livre dans le panier
            $element_quantite = $_SESSION['qte'];
        }
    }
    // Retourne le tableau
    return $element_quantite;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Ajoute une quantite au produit ---
 * Prend en paramètre le numéro ISBN unique du produit
 * -> Ajoute le produit dans le panier et met à jour la session
 */
function addProduitQuantite($isbn, $qte)
{
    $element_quantite = getProduitQuantite();
    $valeur = $isbn;
    
    // Verifie si l'élément n'est pas présent dans le panier
    if(!isInArray($element_quantite, $valeur))
    {
        // Insere l'element dans le panier
        $element_quantite[$valeur] = $qte;
    }
    
    // Créer/MàJ un cookie pour stocker les produits dans le panier
    $_SESSION['qte'] = $element_quantite;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Supprime un produit du panier ---
 * Prend en paramètre le numéro ISBN unique du produit
 * -> Vérifie que le produit est bien dans le panier
 * -> Supprime l'élément en faisant la différence entre le tableau du panier et un tableau avec uniquement le produit à supprimer
 * -> Met à jour le panier, ainsi que la quantité dans le panier = 1 (par défaut)
 */
function delProduitQuantite($isbn)
{
    $element_quantite = getProduitQuantite();
    $valeur = $isbn;
    $element_supprimer = Array($valeur);
    
    // Verifie si l'élément est présent dans le panier
    if(isInArray($element_quantite, $valeur))
    {
        // Supprime l'element du le panier
        $element_quantite = array_diff($element_quantite, $element_supprimer);
    }
    
    // Créer/MàJ un cookie pour stocker les produits dans le panier
    $_SESSION['qte'] = $element_quantite;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Modifie la quantite d'un produit du panier ---
 * Prend en paramètre le numéro ISBN unique du produit et la nouvelle valeur en quantite
 * -> Créer le tableau des quantités s'il n'existe pas
 * -> Ajoute la valeur pour la référence de l'ISBN
 */
function setQuantite($isbn, $valeur)
{
    $element_quantite = getProduitQuantite();
    
    addProduitQuantite($isbn, $valeur);
    
    // Met à jour a valeur
    $element_quantite[$isbn] = $valeur;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Obtient la quantite d'un produit du panier ---
 * Prend en paramètre le numéro ISBN unique du produit
 * Renvoi la quantite saisi dans le tableau des quantité
 * => Si la valeur existe : retourne la valeur
 * => Sinon renvoi 1 (valeur par défaut)
 */
function getQuantite($isbn)
{
    $res = 1;
    $element_quantite = getProduitQuantite();
    
    if(!empty($element_quantite))
    {
        if(isset($element_quantite[$isbn]))
        {
            $res = $element_quantite[$isbn];
        }
    }
    
    return $res;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Affiche le template HTML d'un produit ---
 * Prend en paramètre :
 * @$template le nom du fichier Template Smarty
 * @$critere : Critère de la requête SQL définit dans le fichier "fonction-produit.php"
 * @$condition : Par défaut null, sinon le critére supplémentaire est passer à la requete SQL
 *
 * Renvoi la liste des produits au format HTML en fonction d'un critere
 * -> Execute la requete
 * -> Génére le template au format HTML (à l'aide de smarty)
 * -> Rempli la variable $liste_produit
 * -> La liste des produits peut être vide ce qui affiche un message d'erreur définit en fonction du critère
 */
function afficheProduit($template, $critere, $condition = null)
{
    // Initialise la liste
    $liste_produit = '';
    $mdb2 = connexion();
    
    $message_erreur = '';
    
    // Recupere les élements du cookie
    $element_panier = getProduitPanier();
    $GLOBALS['smarty']->assign('nb_elem_panier', count($element_panier));

    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        // Récupère la requête SQL définit en fonction d'un critère
        $sql = getRequeteCritere($critere, $condition);
        
        $res = $mdb2->query($sql);
        
        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors sélection dans la base LIVRE ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        else
        {
            // Si le nombre de ligne > 0
            if($res->numRows() > 0)
            {
                // Pour chaque ligne
                while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)))
                {
                    // Recupere les élement du Panier
                    $element_panier = getProduitPanier();
                    $GLOBALS['smarty']->assign('nb_elem', $res->numRows());

                    // Répertoire des fichiers image produit
                    $path_img = "css/produits/".$row['image'];
                    
                    // Appel de la méthode qui teste l'existence du chemin de fichier
                    if(!file_exists($path_img)){
                        $path_img = "css/produits/no-picture.png";
                    }
                    
                    // Si la quantité est sélectionne (pour une commande)
                    if(isset($row['qte']))
                    {
                        $qte = $row['qte'];
                    }
                    else
                    {
                        $qte = getQuantite($row['isbn']);
                    }
                    
                    // Tableau associatif des produits (minuscule importante !)
                    $GLOBALS['smarty']->assign('Produit',
                        array('ISBN' => $row['isbn'],
                            'TITRE' => utf8_encode($row['titre']),
                            'AUTEUR' => utf8_encode($row['auteur']),
                            'EDITEUR' => utf8_encode($row['editeur']),
                            'DATEPARUTION' => $row['dateparution'],
                            'MOTSCLES' => utf8_encode($row['motscles']),
                            'RESUME' => utf8_encode($row['resume']),
                            'THEME' => utf8_encode($row['theme']),
                            'PRIX' => $row['prix'],
                            'QTESTOCK' => $row['qtestock'],
                            'PAYS' => utf8_encode($row['pays']),
                            'IMAGE' => $path_img,
                            'PANIER' => isInArray($element_panier, $row['isbn']),
                            'QTE' => $qte
                        )
                    );

                    // Affiche le produit sélectionné
                    $liste_produit .= $GLOBALS['smarty']->fetch($template);
                }
            }
            else
            {
                // Obtient le message d'erreur
                $message_erreur = getErreurMsg($critere);
            }
        }
        
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));

    // Renvoi les produits listés format HTML
    return $liste_produit;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Affiche le template HTML d'un produit ---
 * Prend en paramètre :
 * @$template le nom du fichier Template Smarty
 * @$critere : Critère de la requête SQL définit dans le fichier "fonction-produit.php"
 * @$condition : Par défaut null, sinon le critére supplémentaire est passer à la requete SQL
 *
 * Renvoi la liste des commande du client
 * -> Execute la requete
 * -> Génére le template au format HTML (à l'aide de smarty)
 * -> Rempli la variable $liste_commande et $liste_produit
 * -> La liste des produits peut être vide ce qui affiche un message d'erreur définit en fonction du critère
 */
function afficheCommande($template, $critere, $condition = null)
{
    // Initialise la liste
    $liste_commande = '';
    $liste_produit = '';
    $mdb2 = connexion();
    
    $commande = Array();
    $message_erreur = '';
    
    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        // Récupère la requête SQL
        $sql = getRequeteCritere($critere, $condition);
        $res = $mdb2->query($sql);
        
        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors sélection dans la base LIVRE ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        else
        {
            // Si le nombre de ligne > 0
            if($res->numRows() > 0)
            {
                while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)))
                {
                    $condition = "LC.NUMCMD = ". $row['numcmd'];
                    // Affiche le produit sélectionné
                    $liste_produit = afficheProduit("produit-individuel-historique.tpl", "historique-produit", $condition);
                    // Assigne les produits à smarty
                    $GLOBALS['smarty']->assign('liste_produit', $liste_produit);
                    // Tableau associatif des commandes (minuscule importante !)
                    $GLOBALS['smarty']->assign('Commande', Array('NUMCMD' => $row['numcmd'],
                        'DATECMD' => utf8_encode($row['datecmd']),
                        'ETAT' => $row['etat']
                    ));
                    // Affiche la commande avec les produits associé
                    $liste_commande .= $GLOBALS['smarty']->fetch($template);
                }
            }
            else
            {
                // Obtient le message d'erreur
                $message_erreur = getErreurMsg($critere);
            }
        }
        
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
    
    return $liste_commande;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Retourne le prix total du panier ---
 * Renvoi un entier qui est la somme du panier
 */
function getPrixTotalPanier()
{
    // Initialise la liste
    $prix_total = 0;
    $mdb2 = connexion();
    
    $message_erreur = '';
    
    // Recupere les élements du cookie
    $element_panier = getProduitPanier();

    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        // Condition toujours fausse
        $condition_sql = 'WHERE 0=1';
        foreach($element_panier as $key => $value)
        {
            $isbn = $value;

            // Si n'est pas vide
            if(!empty($condition_sql))
            {
                $condition_sql .= ' or ';
            }

            $condition_sql .= '(ISBN = "'.$isbn.'")';
        }

        $sql = 'SELECT ISBN, TITRE, AUTEUR, EDITEUR, date_format(DATEPARUTION, "%d/%m/%Y") as DATEPARUTION, MOTSCLES, RESUME,
            THEME, PRIX, QTESTOCK, PAYS FROM LIVRE '.$condition_sql;
        $res = $mdb2->query($sql);

        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors sélection dans la base LIVRE ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        else
        {
            // Si le nombre de ligne > 0
            if($res->numRows() > 0)
            {
                while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC))) {
                    $prix = $row['prix'];
                    $qte = getQuantite($row['isbn']);
                    $prix_total += ($prix*$qte);
                }
            }
        }
        
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
    
    return $prix_total;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Récupère le numéro de la commande pour une date et un client ---
 * Prend en paramètre :
 * @$date : la date de la commande
 * @$numclient : le numéro du client de la commande
 *
 * Renvoi un entier qui est le numéro de la commande dans la base
 */
function get_numero_commande($date, $numclient)
{
    // Numero par defaut
    $numcmd = null;
    $message_erreur = '';
    
    $mdb2 = connexion();
    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        // L'insertion s'est bien passé on récupere le numéro de la commande unique
        $sql = 'SELECT NUMCMD FROM COMMANDE 
            where NUMCLIENT = "'.$numclient.'"
            and DATECMD = "'.$date.'"
            and ETAT != "Payée"';

        $res = $mdb2->query($sql);

        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors de la récuperation de la commande ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        else
        {
            // Si le nombre de ligne > 0
            if($res->numRows() > 0)
            {
                // Pas d'erreur
                $message_erreur = '';

                while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)))
                {
                    $numcmd = $row['numcmd'];
                }
            }
        }
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
    
    return $numcmd;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Créer une commande ---
 * Insert une nouvelle commande s'il n'y a pas de commande en cours
 *
 * Renvoi le numéro de la commande créé
 */
function creer_commande()
{
    // Initialise la liste
    $numcmd = null;
    
    $message_erreur = '';
    
    // Date du jour et l'heure
    $date = date("Y-m-d");
    // Numéro du client connecte
    $numclient = getNumClientConnecte();
    // Récupere le numero de la commande si elle est déjà en cours
    $numcmd = get_numero_commande($date, $numclient);
    
    // Si aucun numero n'existe pour le client à ce jour
    if(empty($numcmd))
    {
        $mdb2 = connexion();
        if(MDB2::isError($mdb2))
        {
            $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
            $message_erreur .= $mdb2->getDebugInfo() ."<br />";
            $message_erreur .= $mdb2->getMessage() ."<br />";
        }
        else
        {
            $sql = 'INSERT INTO COMMANDE (NUMCLIENT, DATECMD)
                VALUES ("'.$numclient.'", "'.$date.'")';

            $res = $mdb2->query($sql);

            if(MDB2::isError($res))
            {
                $message_erreur = "Erreur lors de l'insertion de la commande ! <br />";
                $message_erreur .= $res->getDebugInfo() ."<br />";
                $message_erreur .= $res->getMessage() ."<br />";
            }
            else
            {
                // L'insertion s'est bien passé on récupere le numéro de la commande unique
                $numcmd = get_numero_commande($date, $numclient);
            }
        }
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
    
    return $numcmd;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Créer une ligne de commande ---
 * Prend en paramètre :
 * @$numcmd : le numéro de la commande associé
 *
 * -> Vide les lignes de commandes associé au numéro de commande
 * -> Insert tous les produits du panier en ligne de commande
 */
function creer_ligne_commande($numcmd)
{
    // Initialise la connexion
    $mdb2 = connexion();
    
    $message_erreur = '';
    
    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        // Vide les produits associé à la commande
        $sql = 'DELETE FROM COMMANDER WHERE NUMCMD = '.$numcmd.'';
        $res = $mdb2->query($sql);
        
        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors de la suppression des ligne de commande existante ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        else
        {
            // Liste des livres du panier
            $element_panier = getProduitPanier();
            $message_erreur = '';
            // Pour tous les elements du panier
            foreach ($element_panier as $key => $value) {
                $isbn = $value;
                $qte = getQuantite($isbn);

                $sql = 'INSERT INTO COMMANDER (NUMCMD, ISBN, QTE)
                VALUES ("'.$numcmd.'", "'.$isbn.'", "'.$qte.'")';

                $res = $mdb2->query($sql);

                if(MDB2::isError($res))
                {
                    $message_erreur .= "Erreur lors de l'insertion de la ligne de commande ! <br />";
                    $message_erreur .= $res->getDebugInfo() ."<br />";
                    $message_erreur .= $res->getMessage() ."<br />";
                }
            }
        }
        
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Met à jour l'état d'une commande ---
 * Prend en paramètre :
 * @$numcmd : le numéro de la commande associé
 * @$etat : l'état de la commande [Payée, En cours, En attente]
 */
function setEtatCommande($numcmd, $etat)
{
    // Initialise la connexion
    $mdb2 = connexion();
    
    $message_erreur = '';
    
    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        // Met à jour l'état de la commande
        $sql = 'UPDATE COMMANDE SET ETAT = "'.$etat.'" WHERE NUMCMD = '.$numcmd.'';
        $res = $mdb2->query($sql);
        
        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors de la modification de l'état de la commande ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Met à jour l'état d'une commande ---
 * Fonction prédéfinit pour changer l'etat de la commande à "En cours"
 */
function commande_en_cours($numcmd)
{
    setEtatCommande($numcmd, "En cours");
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Met à jour l'état d'une commande ---
 * Fonction prédéfinit pour changer l'etat de la commande à "Payée"
 */
function commande_payer($numcmd)
{
    setEtatCommande($numcmd, "Payée");
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Génére un tableau avec les infos du produit ---
 * Prend en paramètre :
 * @$critere : Critère de la requête SQL définit dans le fichier "fonction-produit.php"
 *
 * Renvoi le tableau contenant les infos sur le produit pour la page d'accueil
 * -> Execute la requete
 * -> Génére le tableau avec les champs définit :
 * ---- ISBN :
 * ---- titre : Titre affiché
 * ---- titre_complet : Titre complet affiché
 * ---- description : Description du produit
 * ---- image : fichier de l'image associé
 * ---- promo : Si une promo existe
 */
function genere_tableau($critere)
{
    // Initialise la liste
    $tableau = null;
    $mdb2 = connexion();
    
    $message_erreur = '';
    
    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        $sql = getRequeteCritere($critere);
        $res = $mdb2->query($sql);
        
        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors sélection dans la base LIVRE ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        else
        {
            // Si le nombre de ligne > 0
            if($res->numRows() > 0)
            {
                // Compteur
                $i = 1;
                
                if($critere == "accueil_top_vente")
                {
                    $nb_caract_max_titre_1 = 12;
                    $nb_caract_max_titre_2 = 8;
                    $nb_caract_max_description = 16;
                }
                else if($critere == "accueil_promotion")
                {
                    $nb_caract_max_titre_1 = 17;
                    $nb_caract_max_titre_2 = 17;
                    $nb_caract_max_description = 100;
                }
                else if($critere == "accueil_nouveautes")
                {
                    $nb_caract_max_titre_1 = 12;
                    $nb_caract_max_titre_2 = 12;
                    $nb_caract_max_description = 100;
                }
                else
                {
                    $nb_caract_max_titre_1 = 12;
                    $nb_caract_max_titre_2 = 10;
                    $nb_caract_max_description = 18;
                }
                
                while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)))
                {
                    $titre = $row['titre'];
                    $titre_reduit = $row['titre'];
                    if($i == 1 and strlen($titre_reduit) > $nb_caract_max_titre_1)
                    {
                        $titre_reduit = substr($titre_reduit, 0, $nb_caract_max_titre_1) . "...";
                    }
                    else if(strlen($titre_reduit) > $nb_caract_max_titre_2)
                    {
                        $titre_reduit = substr($titre_reduit, 0, $nb_caract_max_titre_2) . "...";
                    }
                    
                    $description = $row['resume'];
                    if(strlen($description) > $nb_caract_max_description)
                    {
                        $description = substr($description, 0, $nb_caract_max_description) . "...";
                    }

                    $promo = '';
                    if(isset($row['promo']))
                    {
                        $promo = $row['promo'];
                    }
                    
                    // Chemin de l'image
                    $path_img = "css/produits/".$row['image'];
                    
                    // Appel de la méthode qui teste l'existence du chemin de fichier
                    if(!file_exists($path_img)){
                        $path_img = "css/produits/no-picture.png";
                    }
                    
                    // Tableau associatif des produits (minuscule importante !)
                    $tableau[$i++] = array('ISBN' => $row['isbn'],
                        'titre' => utf8_encode($titre_reduit),
                        'titre_complet' => utf8_encode($titre),
                        'description' => utf8_encode($description),
                        'image' => $path_img,
                        'promo' => $promo
                    );
                }
            }
            else
            {
                // Obtient le message d'erreur
                $message_erreur = getErreurMsg($critere);
            }
        }
        
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
    
    return $tableau;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Génére un tableau avec les infos du produit vide ---
 * 
 * Renvoi le tableau contenant les infos sur le produit vide
 * -> Génére le tableau avec les champs définit :
 * ---- ISBN :
 * ---- titre : Titre affiché
 * ---- titre_complet : Titre complet affiché
 * ---- description : Description du produit
 * ---- image : fichier de l'image associé
 */
function get_produit_vide()
{
    return array('ISBN' => '',
                'titre' => '',
                'titre_complet' => '',
                'description' => '',
                'image' => 'css/produits/no-picture.png'
            );
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Récupère les produits TOP ---
 *
 * Fonction prédéfinit retournant le tableau des top ventes
 */
function get_top_produit()
{
    $top_produit = genere_tableau("accueil_top_vente"); 
    while(count($top_produit) < 4)
    {
        $top_produit[] = get_produit_vide();
    }
    
    return $top_produit;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Récupère les produits en promotion ---
 *
 * Fonction prédéfinit retournant le tableau des promotions
 */
function get_promotion()
{
    $promo_produit = genere_tableau("accueil_promotion");
    while(count($promo_produit) < 4)
    {
        $promo_produit[] = get_produit_vide();
    }
    
    return $promo_produit;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Récupère les produits récents ---
 *
 * Fonction prédéfinit retournant le tableau des nouveautés
 */
function get_nouveautes()
{
    $nouveautes_produit = genere_tableau("accueil_nouveautes");
    while(count($nouveautes_produit) < 4)
    {
        $nouveautes_produit[] = get_produit_vide();
    }
    
    return $nouveautes_produit;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Affiche les produits de la recherche ---
 * Prend en paramètre :
 * @$recherche : La chaine de caractère du champs recherche
 *
 * Renvoi la page compléte du template "produit-recherche.tpl"
 * -> Génére la requete SQL en fonction de chaque mot ecrit dans le champ
 * -> Liste les produits du résultat
 * -> Renvoi le résultat au format HTML
 */
function getProduitRecherche($recherche)
{
    // Divise chaque mot de la recherche
    $mots = explode(" ", $recherche);
    
    $condition = "";
    foreach($mots as $key => $values)
    {
        // Si la valeur n'est pas vide
        if(!empty($values))
        {
            // Remplace les caractères spéciaux [*] par des [%]
            $values = str_replace("*", "%", $values);
            
            // Si la condition est déjà rempli
            if(!empty($condition))
            {
                $condition .= " AND ";
            }
            
            // Recherche en fontion des mot clés
            $condition .= "(MOTSCLES like '%;$values;%'";
            $condition .= " OR ";
            $condition .= "TITRE like '%$values%')";
        }
    }

    // Enregistre la condition de recherche dans une variable smarty
    $GLOBALS['smarty']->assign('condition', $condition);
    
    // Affiche tous les produits
    $liste_produit = afficheProduit("produit-individuel.tpl", "recherche", $condition);
    $GLOBALS['smarty']->assign('liste_produit', $liste_produit);

    // Retourne la page HTML
    return $GLOBALS['smarty']->fetch('produit-recherche.tpl');
}
?>